% -*- coding:utf-8 -*-

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}

\usepackage[bookmarks, hyperfootnotes=false, colorlinks=true,%
            urlcolor=blue, linkcolor=black,  citecolor=black,%
            pagecolor=black, anchorcolor=black, breaklinks=true]{hyperref}

\usepackage{enumerate}
\usepackage{eurosym}
\usepackage{graphicx}
\usepackage{times}
\usepackage{color}
\usepackage{array}
\usepackage{colortbl}
\usepackage{longtable}

\usepackage{fancyhdr}
\usepackage{fancybox}
\usepackage{listings}
\usepackage{subfigure}
\usepackage{hyperref}
\usepackage{tikz}

\usepackage{epsfig}
\usepackage{float}
\usepackage{amsmath}
\usepackage{lscape}

\setlength{\headheight}{16pt}
\setlength{\oddsidemargin}{17pt}
\setlength{\textwidth}{420pt}
\setlength{\topmargin}{0pt}
\setlength{\textheight}{600pt}
\setlength{\marginparwidth}{55pt}


\newcommand{\fsm}{\emph{FSM}}
\newcommand{\ice}{\emph{ICE}}
\newcommand{\icefield}{\emph{IceField}}
\newcommand{\slice}{\emph{Slice}}

\pagestyle{fancy}

\renewcommand{\footrulewidth}{0.5pt}

\fancyhead[R]{Práctica 1-Tarea 1}
\fancyhead[L]{Inteligencia Artificial}
\fancyfoot[R]{Manuel J. Abaldea Gª-Pliego}
\fancyfoot[L]{Tecnologías utilizadas y definición de estado y acción}


\newenvironment{float_code} {
      \begin{lst}
      }
      {
      \end{lst}
      }


\newfloat{lst}{H}{lop}[section]
\floatname{lst}{Listado}
\floatplacement{codigo}{!htb}
\floatstyle{plain}


\begin{document}

\begin{center}
\begin{Large}\textit{\textquotedblleft
Inteligencia Artificial \ \ Práctica 1 - Tarea 1
\textquotedblright}\end{Large}
\end{center}

\vspace*{0.5cm}

\begin{flushleft}
\begin{large}
\textit{
Alumno: Manuel J. Abaldea Gª-Pliego
}
\end{large}
\end{flushleft}

\vspace*{1cm}

\section*{Tecnologías utilizadas y definición de estado y acción.}
\subsection*{Tecnologías usadas}
Para la realización de esta primera práctica utilizaré el lenguaje de
programación \emph{C++}.

\emph{C++} nos proporciona varias ventajas como
que es un lenguaje orientado a objetos, esto facilita la creación de
sistemas complejos proporcionando robustez y legibilidad en el
código. ¿Por qué no utilizar otro lenguaje orientado a objetos como
\emph{Java}? Por didáctica, he trabajado mucho menos con \emph{C++} y
quiero aprovechar este trabajo para practicar. Otra gran ventaja, que
se puede volver en mi contra, es el manejo de punteros y memoria; esto
nos proporciona un mejor control de la memoria y administración de los
recursos pero puede complicar el código si no se tiene suficiente
experiencia. También están las típicas ventajas de: es muy utilizado
y hay muchos tutoriales, existen muchas librerías, es compatible con
las de C, etc.

Para manipular las imágenes utilizaré una librería propia. Guardando
la imagen como \emph{PGM} en \emph{ASCI} puedo tomar la imagen como un
texto plano y trabajar con ella, de modo que una librería simple que
lea las cadenas de texto y obtenga la información necesaria para
trabajar es suficiente. Esto dará simplicidad a la práctica y bien
programada puede incluso ahorrar recursos.

\subsection*{Problema de espacio de estados simple.}
Para definir un estados utilizaremos:
\begin{itemize}
\item posición: en el eje X e Y
\item mapa: matriz con los valores (coste) en las coordenadas y marcadas las
  posiciones visitadas
\item coste acumulado: valor del coste del camino que llevamos recorrido
\end{itemize}

De modo que un estado sería: $\{X,Y,mapa,coste\}$

Los actuadores serían los movimientos, considerando que comenzamos
desde la esquina superior izquierda:
\begin{itemize}
\item mover izquierda: X-1
\item mover derecha: X+1
\item mover abajo: Y+1
\item mover arriba: Y-1
\end{itemize}

\clearpage

El motivo de comenzar desde la esquina superior izquierda es que
utilizaré una matriz de enteros para representar el mapa, de modo que
de este modo las coordenadas X e Y coincidirán con las coordenadas de
la matriz, y el valor en dicha coordenada será el coste en escala de
grises (0-15) de la posición.
Antes de que los actuadores transformen el estado tendremos en cuenta:
\begin{itemize}
\item mover izquierda: solo si X-1 > 0
\item mover derecha: solo si X+1 < anchura del mapa
\item mover abajo: solo si Y+1 < profundidad del mapa
\item mover arriba: solo si Y-1 > 0
\end{itemize}

Para el almacenamiento de los datos durante la ejecución utilizaré una
base de datos \emph{SQLite}. La utilicé el año pasado y aunque es algo
más complejo de utilizar que otra estructura de datos intrínseca en el
código como una cola circular o un árbol, me proporciona rubustez
(aguanta millones de nodos sin despeinarse) y me facilitará la gestión
(creación, acceso, modificación, eliminación) de los nodos así como la
gestión de la memoria.

\subsection*{Estructuras necesarias.}
Este apartado se me da completamente resuelto al utilizar una base de
datos como he indicado en el apartado anterior.


\end{document}
